package br.ufrj.neg.bean;

import java.util.Locale;
import java.util.PropertyResourceBundle;
import br.com.fernandoqueiroz.webftp.DateFormat;
import br.ufrj.neg.util.Data;
import br.ufrj.neg.util.PropertyLoader;

public class Idioma {

	/*Ids no Banco*/
	public static final int idPortugues= 1;
	public static final int idIngles= 2;
	public static final int idEspanhol= 3;
	public static final int idAlemao= 4;
	
	
	/*Usado para iterar no template de renderizacao de formularios de edicao de traducoes. Suas posicoes sao correspondentes 
	 * aos ids dos idiomas.
	 * */
	public static final Idioma[] instancias = {null,new Idioma("pt-br"),new Idioma("en-us"), new Idioma("es"), new Idioma("de") };
	
	
	private PropertyResourceBundle rb;
	private Locale local;
	private java.text.DecimalFormatSymbols dfs;
	private java.text.DecimalFormat dinheiro;
	private int idIdioma;
	
	public Idioma() {
		this.dfs  = new java.text.DecimalFormatSymbols();
		this.dfs.setDecimalSeparator('.');
		this.dinheiro = new java.text.DecimalFormat("0.00",dfs);		
	}

	public Idioma(String idioma) {
		this();
		idioma = idioma.replace("_", "-");
		String id,var;
		id = idioma.split("-")[0];
		var = null;
		
		if( idioma.split("-").length > 1){
			var =idioma.split("-")[1]; 
		}
		
		if( var==null ){
			local = new Locale( id );
		}
		else{
			local = new Locale( id,var );
		}
		setIdioma(local);
	}

	public void setIdioma(Locale local) {
		if (local.getLanguage().equalsIgnoreCase("pt")) {
			setIdiomaPt();			
			this.idIdioma = idPortugues;
		} 
		else if( local.getLanguage().equalsIgnoreCase("es") ){
			setIdiomaEs();
			this.idIdioma = idEspanhol;
		}
		else if( local.getLanguage().equalsIgnoreCase("de") ){
			setIdiomaDe();
			this.idIdioma = idAlemao;
		}
		else{
			setIdiomaEn();
			this.idIdioma = idIngles;			
			this.local = new Locale( "en","us" );
		}
	}
	
	private void setIdiomaPt(){
		this.rb = PropertyLoader.getPropertyLoader().getPpt_pt();
	}

	private void setIdiomaEn(){
		this.rb = PropertyLoader.getPropertyLoader().getPpt_en();
	}
	
	private void setIdiomaEs(){
		this.rb = PropertyLoader.getPropertyLoader().getPpt_es();
	}
	
	private void setIdiomaDe(){
		this.rb = PropertyLoader.getPropertyLoader().getPpt_de();
	}	
	
	public String get(String key) {
		try {
			return (String) this.rb.getString(key);	
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println(key);
			return null;
		}				
	}
	
	public String getFormatoData(){
		if( local.getCountry().equalsIgnoreCase("br")){
			return "dd MMMM yyyy";
		}
		else{
			return "MMMM dd yyyy";
		}
	}
	
	public String getFormatoDataFormulario(){
		if( local.getCountry().equalsIgnoreCase("br")){
			return "dd/MM/yyyy";
		}
		else{
			return "MM/dd/yyyy";
		}
	}
	
	public String getData(long data){		
		return DateFormat.FormatDataLong(data,getFormatoData(),local);
	}
	
	public String getData(Data data){
		return DateFormat.FormatDataDate(data,getFormatoData(),local);
	}	
	
	public String getDataFormulario(Data data){
		if( data == null){
			return "";
		}
		else{
			/* Sem DOJO
			return DateFormat.FormatDataDate(data,getFormatoDataFormulario(),local);
			*/
			
			/* Com DOJO */
			return DateFormat.FormatDataDate(data,"yyyy-MM-dd",local);
	
		}		
	}
	
	public String getDataBanco(String data){
		if( data == null ){
			return "";
		}
		return DateFormat.FormatStringToNewPattern(data, "yyyy-MM-dd", getFormatoData());
	}
	
	public String getDataReuniao(Data data) {
		if( data == null ){
			return "";
		}
		String pattern="";		
		if (local.getLanguage().equals("pt"))
			pattern = "EEE dd/MM/yyyy HH:mm";	
		else			
			pattern = "EEE MM/dd/yyyy HH:mm";
		return DateFormat.FormatDataDate(data, pattern, local);	
	}
	
	public String getDinheiroFormato(double num){
		return dinheiro.format(num);
	}
	
	public Locale getLocale() {
		return this.local;
	}
	
	public int getIdIdioma(){
		return this.idIdioma;
	}
	
	public String getAliasIdioma(int idiomaCorrente){
		
		String traducao = "";
		
		switch(this.idIdioma){
			case idAlemao:
				traducao = getInstanceById(idiomaCorrente).get("negociacao.dicas.idioma.de");
				break;
			case idEspanhol:
				traducao = getInstanceById(idiomaCorrente).get("negociacao.dicas.idioma.es");
				break;		
			case idIngles:
				traducao = getInstanceById(idiomaCorrente).get("negociacao.dicas.idioma.en");
				break;
			case idPortugues:
				traducao = getInstanceById(idiomaCorrente).get("negociacao.dicas.idioma.pt");
				break;				
		}
		return traducao;
	}
	
	@Override
	public String toString(){
		return this.getLocale().getLanguage().toLowerCase();
	}
	
	@Override
	public boolean equals(Object obj){
		Idioma id = (Idioma) obj;
	
		return this.idIdioma == id.idIdioma;
	}
	
	@Override
	public int hashCode(){	
		return this.toString().charAt(0); 
	}

	public static Idioma getInstanceById(int id){
		return instancias[id];
	}
	
	public static Idioma[] getInstancias(){
		return instancias;
	}
	
}
